![]() |
STM32 电机控制 SDK MCFW-6.4.1
基于 STM32 微控制器驱动 PMSM 电机的软件开发工具包 - 中文版
|
⬅️ 上一页:固件使用的测量单位 | 📋 目录 | 下一页:电角估计补偿 ➡️
![]() |
STM32 电机控制 SDK MCFW-6.4.1
用于构建驱动 STM32 的 PMSM 电机应用的软件开发套件
|
上一页:固件使用的测量单位 ↤|目录 |↦ 下一页:电角度估计补偿
本文档介绍了实现6-Step算法(也称为梯形算法)的软件库,该软件库包含在为STM6微控制器设计并用于STM32微控制器的X-CUBE-MCSDK STM32电机控制软件开发套件(SDK)中。该6-Step库支持控制三相永磁(PMSM)或无刷直流电机(BLDC),可用于快速评估ST微控制器,完成ST应用平台,并在开发用于ST微控制器的电机控制算法时节省时间。它用C语言编写,实现了核心的电机控制算法,以及传感器读译算法和用于旋翼位置重建的无传感器算法。
该库可根据用户应用参数(电机、传感器、功率级、控制级、引脚分配)进行定制,并提供即用的应用程序接口(API)。PC图形用户界面(GUI)ST电机控制工作台允许对库进行完整且便捷的定制。因此,用户可以在极短时间内运行电机。
Generate的项目包括一个UART接口,允许通过远程控制工具STM32 motor control pilot方便实时微调电机控制子系统。
STM32 电机控制 SDK 作为 STM32STM32CubeMX 工具的扩展包提供,6-Step 库基于 STM32Cube 固件库。
支持的STM32微控制器列表见SDK随发布的说明。
请参阅表1:术语与缩写页面,列出文档中使用的所有缩写和简称。
无刷三相电机如图1所示,由一个固定元件(称为定子)组成,由一组三组绕组(即相位)组成,一侧连接,以及一个包含内部永磁体(称为转子)的运动元件。转子可能有几对极,分布在定子周围。
图1:电机定子与转子布置
在6-Step驾驶中,电循环被划分为六个换向步。每一步,母线电压连接到电机的三相绕组之一,而地线连接到第二个绕组,推动电流流经这两个绕组,产生定子磁场,如图6所示。第三个绕组保持漂浮状态。
图2:电机定子和转子磁场
定子磁场的方向会发生变化,使绕组充满能量,顺序如图3所示。
图3:电机定子磁场离散位置
由于转子具有永久磁场,旋转的定子磁场产生了推动转子运动的扭矩。当转子与定子之间的电角为90°时,可获得最大扭矩。定子磁场的方向因六级换向而改变,使电机保持旋转,如图6所示。
图4:电机扭矩
6-Step固件每60度显示电机转子的位置(无论是无传感器模式还是传感器模式)。基于这些信息,它计算下一步换向的时间,并计算驱动输出功率晶体管的PWM信号的占空比。这些晶体管控制电机相位电压,使其达到目标转速。
6-Step固件可以看作一组组件,每个组件承担不同的任务。
图5:基本6-Step算法结构
以下列表描述图5中显示的组件:
在开环模式下,输入占空比直接作用于电机相位。因此,达到的速度取决于电机的机械负载。
电机转速通过直接改变施加在电机相位上的脉宽调制电压的占空比来控制。
电机转速通过限制流经有源相的电流峰值来控制。
该驱动模式利用放大器A和比较器C的存在。电流通过设置由定时器(REF定时器)产生的占空比来控制,PWM作为比较器C的参考电压。当放大感应电阻电压大于参考电压时,比较器的输出会触发连接到电机相位的PWMs的关闭。
图6:当前驾驶模式结构
在无传感器模式下,转子的位置通过检测浮动相时感测到的BEMF零交叉来获得。这通常通过ADC实现,如图7所示。特别地,当转子磁场穿越高阻抗相时,相应的BEMF电压会改变其符号(零交叉)。通过电阻网络,BEMF电压可以在ADC输入处进行缩放。
图7:带传感器电路的电机
图8展示了常用的感知BEMF的网络。其目的是分流电机相位电压,以便ADC正确获取。R2和R1的值应根据总线电压电平选择。用户应注意,如果实现的R1 / (R2 + R1)比率远低于所需,BEMF信号可能导致电压过低,控制不够稳健。另一方面,超过所需比例会导致D1保护二极管频繁开关,其恢复电流可能引入噪声。推荐值为:
R1/(R1+R2)=(0.95 ×VDD)/(总线电压[V])
应避免R1和R2的极低值,以限制电机相抽头的电流。R1有时连接到GPIO而非GND,允许网络在运行时启用或禁用。在6-Step固件中,GPIO 始终处于重置状态,网络也已启用。然而,在设置PWM导通时间的BEMF阈值时,必须考虑D3的最终存在:通常会为理想阈值增加0.5÷0.7伏。
BEMF阈值(导通时间)=D3(正向电压)+ (总线电压[V])/2
C1用于滤波,不应限制PWM频段的信号带宽。D4和R3用于PWM换相时BEMF_SENSING_ADC节点的快速放电,尤其是在高压板中。D1和D2二极管为可选,仅在可能违反BEMF传感ADC信道最大额定值时添加。
**图8 **:BEMF传感网络
在这种驱动模式下,转子的位置通过读取来自霍尔传感器(连接三个GPIO)的数字信号来获得。
在校准时间内,转子的位置会被确定,电机绕组也会相应地通电。当检测到传感器换相时,会获得新的状态。同时,步骤会被更改,PWM也相应更新。
STM32 MC 固件是 SDK 的核心。它提供了控制三相电机所需的所有软件组件,采用6-Step策略,并将这些组件集成到MC子系统中。它提供了一套多功能的接口,供定制应用根据需求驱动电机。
图9展示了STM32 MC固件的架构。
固件由以下三个功能集组成:
图9:STM32电机控制固件架构
6-StepMC库是一组软件组件。每个组件都实现了MC相关的功能,如速度和位置感测、PID调节器或电机控制算法。
对于某些功能,库提供了多个组件,每个组件包含不同的实现。这使得能够高效支持各种硬件配置。然后,根据用户应用的特性选择所使用的组件,并集成到电机控制固件子系统中。
图10总结了6-Step库作为组成部分所提供的特性。6-Step库中大多数组件及其具体细节详见第6.5节。
图10:作为组件交付的6-StepMC库功能
UI Library或UI Library包含软件组件,负责通过串口处理MC固件子系统与外部世界之间的通信。该库用于允许STM32 MC WB连接应用程序,并通过其监控功能进行控制。
发动机控制座舱将软件组件集成到MC固件子系统中,并实现调节环。它实例化、配置并接口了在6-Step库中选择的固件组件和用户应用程序的UI Library。MC座舱的代码由STM6Cube根据应用特性Generate。得益于这一代,驾驶舱代码只包含所需内容,因此易于阅读。
电机控制固件子系统是通过配置和Generate STM32 MC WB / STM32CubeMx 对固件项目而产生的固件库。用户随后在该子系统之上构建最终应用,添加使用所提供API之一的代码(见下文)。图11概述了该子系统,展示了可选和强制的功能模块及其相互作用。请注意,为了清晰起见,仅展示最重要的区块和交互。此图突出展示了三组功能模块。6-Step循环是算法的核心。其目的是更新计时器寄存器,决定阶跃变换,并将占空比(在参考环中计算)应用于驱动电机相位的晶体管。6-Step循环每360度执行一次,周期取决于速度和电机极对数。
图11:电机控制子系统概述
参考计算循环的目的,顾名思义,是基于应用程序的目标计算占空比引用。通常,应用程序会以符合其需求的方式提供一个参考:速度参考或斜坡。参考计算环先将应用目标转换为相电压占空比或参考电流占空比,然后用于Generate电机绕组、PWM,以及可选的电流参考PWM。当电机控制子系统处于闭环模式下时,该过程即生效。不过,这并不是唯一的作模式。事实上,根据所选的速度和位置反馈技术,可能需要一个转速/加量阶段接管该过程,直到转子位置估计被认为可靠。这就是转速控制组件的目的。此外,某些应用可能需要马达控制保持开环。这种情况由开环控制组件处理,该组件代替常规调节过程执行。所有这些情况都属于以中速执行的参考计算循环,通常在SysTick中断上执行。最后一组功能模块是安全环。这个集合被称为循环,因为它包含了周期性执行的函数。它们都涉及旨在应对可能从硬件角度危害系统的条件的功能:过电压保护、过热保护和过电流保护。在过电流保护方面,STM32 MCU固件设计利用STM32 MCU中实现的硬件机制,如定时器中断输入,加速系统对过流状态的反应。安全环路的执行速率与参考计算环相同——即中速,通常伴随SysTick中断。
大多数电机控制固件由一组软件组件组织。组件是一个自包含的软件单元,定义:
组件结构中的数据是描述该组件并调节其行为的参数。它们完全描述了组件的状态。在电机控制固件中,定义了一个类型来将这些数据合并在一起。此类变量作为组件实例的句柄使用。
图12:一个组件及其手柄和功能
这个原理的使用非常直接。当需要某个特征时,选择与该特征匹配的组件,并定义结构类型的变量。然后,变量会被初始化为该功能的参数,并按照应用程序定义。当电机控制固件子系统被函数初始化时,这会实现。MC_boot()
最后,在电机控制固件子系统运行过程中,在需要时调用该组件定义的功能,以利用其所提供的特性。这些函数提供了组件的功能。为了完成任务,他们期望组件结构的句柄上的指针作为第一个参数,以便访问所工作组件实例的状态和设置。
组件的概念使得提供多个功能实现变得容易。对于这种情况,特征会定义一个通用组件。其句柄包含该功能与其实际实现为何的共同数据,其功能则基于这些数据运行。此外,定义了每个实现该功能组件需要提供的函数原型。这些功能是组件之间的接口。
然后,这些实现组件会重用并扩展通用组件的句柄,实现实现该功能的函数。这简化了集成过程,并方便地用其他实现替代。
图13:一个组件及其手柄和功能
一个例子是速度和位置反馈组件集合。定义了一个通用组件,由speed_pos_fdbk.h文件中定义的SpeednPosFdbk_Handle_t句柄结构表示。该通用部件的手柄仅包含与电机转子转子速度和位置相关的数据,如当前机械角和电角度、它们之间的换算系数以及功能使用的限制。它的功能仅仅是设置和获取这些数据。提供了两个实际实现,一个使用霍尔效应传感器,另一个使用基于BEMF传感算法实现该功能。这两种实现各自定义了扩展SpeednPosFdbk_Handle_t的handle,并且各自基于相同原型定义了接口函数。
以下章节概述了STM32 MC SDK所提供的所有组件。完整描述请参阅STM32 MC固件参考手册。
功能概述
PWM组件负责
定时器外设用于GeneratePWM信号,并在正确时间触发ADC测量。该机制在第5.1.2节中有更详细的描述。
具体来说,该组件的主要任务是启用和关闭输出,并将电压施加到相应相位,遵循6-Step序列和以下描述的驱动模式。
该任务从电机启动开始,停止时结束。此外,这些元件还参与其他事务,如引导电容充电(需要切换低电极晶体管)以及过电流保护。每个PWM处理与其作相关的定时器中断。它期望这些中断被配置为特定的优先级,并定义了处理这些中断的功能。
应用程序不得篡改这些中断的优先级,也不得更改中断处理程序中的服务顺序。
可用实现及具体情况
6-Step库提供了支持6-PWM和3-PWM(加上3个启用GPIO)设备所需的所有组件。选择与应用实际使用的设备拓扑相匹配的组件通过 STM32 MC WB 执行。
这些实现基于一个通用的PWMGenerate组件,并扩展了它,并提供了所有它们共有的功能和数据。该基础组件无法直接使用,因为它无法提供功能的完整实现。相反,其句柄结构(PWMC_Handle_t)被所有PWM世代专用实现重复使用。
通用PWMGenerate组件所提供的函数构成了PWMGenerate功能的API。调用这些函数会调用实现该功能的组件函数。
除了标准驱动模式(高侧MOSFET采用PWM一相,一相浮动,一相接地),还实现了三种驱动模式:• 低侧MOSFET调制 • 中段对准 • 准同步整流
以下章节将详细解释这三种模式。
当微控制器从一个步骤切换到另一个步骤时,非激励绕组需要一定的去磁时间。在此期间,绕组中的电流沿同一方向继续,但会降至零,且由于被消磁电流掩蔽,BEMF无法被感知。
标准驱动模式将PWM调制应用于高侧MOSFET,另一位非浮相则接地。该驱动模式将PWM调制应用于低侧MOSFET,并将另一非浮动相位连接到总线电压。这样做的优点是加速浮动相的去磁,并缩短BEMF无法被感应的时间,尤其是在消磁电流从桥流向电机相位的步骤中(参见表2)。
| 步 | MOSFET导通 (高侧+低侧) | 去磁电流 | PWM应用时FAST_DEMAG =1 |
|---|---|---|---|
| 第一步 | PhaseU + PhaseV | PhaseW (桥梁到电机) | 第五阶段(LS) |
| 第一步 | PhaseU + PhaseW | PhaseV (从电机到桥) | PhaseU(高中) |
| 第一步 | PhaseV + PhaseW | PhaseU (从桥到电机) | PhaseW(LS) |
| 第一步 | 第五阶段 + 第一阶段 | PhaseW (从电机到桥) | 第五阶段(HS) |
| 第一步 | PhaseW + PhaseU | PhaseV (桥桥到电机) | PhaseU(高中) |
| 第一步 | 相位W + 相位 | PhaseU (从电机到桥梁) | PhaseW(高中) |
表2:快速消磁驾驶模式表
在电机飞行员的高级配置标签页中,用户可以决定每一步独立改变MOSFET的调制状态(见图14)。
图14:一个组件及其手柄和功能
此功能仅适用于支持6-PWM输入的硬件。
在无传感器驾驶模式下,电机首先在预定且已知的转子位置对准,然后开始加速阶段。为了减少机械振动并使启动更顺畅,校准位置选择在相邻步骤之间的中间位置。因此,采用基于序列初始步和旋转方向的6-Step相振表,取代标准的<>步相振化表。这三相都不是漂浮的。
| 初步步骤 | 导演 | PWM应用 | 场地 |
|---|---|---|---|
| 第一步 | 顺时针方向 | 相位U + 相位 | 第五阶段 |
| 逆时针方向 | PhaseU | PhaseV + PhaseW | |
| 第一步 | 顺时针方向 | PhaseU | PhaseV + PhaseW |
| 逆时针方向 | PhaseU + PhaseV | PhaseW | |
| 第一步 | 顺时针方向 | PhaseU + PhaseV | PhaseW |
| 逆时针方向 | 第五阶段 | 相位U + 相位 | |
| 第一步 | 顺时针方向 | 第五阶段 | 相位U + 相位 |
| 逆时针方向 | PhaseV + PhaseW | PhaseU | |
| 第一步 | 顺时针方向 | PhaseV + PhaseW | PhaseU |
| 逆时针方向 | PhaseW | PhaseU + PhaseV | |
| 第一步 | 顺时针方向 | PhaseW | PhaseU + PhaseV |
| 逆时针方向 | 相位U + 相位 | 第五阶段 |
表3:中途定位驾驶模式表
默认情况下,功率级由算法以快速衰减模式驱动。在关断时间开始时,两个带电相位的功率MOS都被关闭,电流通过两个相对的自由轮二极管循环。电流在高 di/dt 时衰减,因为线圈两端的电压是电源电压。死后,低侧MOS和高侧MOS与导电二极管并联,以同步整流模式导通(见图13)。在电机电流较低的应用中,负载电流可能会完全衰减至零,然后反向上升。为避免这种情况,可以启用准同步选项:在同步整流模式下不开启较低功率的MOS,从而防止电流反转。这种作称为“准同步整流模式”(见图14)。准同步选项仅适用于仅配备6 PWM控制设备的主板。准同步和低侧调制驱动模式彼此不兼容。当两者都启用时,只考虑低侧调制。
图15:同步整流
图16:准同步整流
这些部件提供电机转子(包括电气和机械)的速度和角度位置。虽然角度位置对于在正确时间正确执行阶梯变换至关重要,但转子速度测量是闭合速度环路的关键。
STM32 MC 固件提供了两种速度反馈和位置反馈功能的实现。一种使用嵌入某些电机的传感器(霍尔传感器),另一种则根据对电机反电动势的感应,估算转子的速度和位置。
这两种实现基于一个通用的速度与位置反馈组件——称为速度与位置反馈组件——它们对其进行了扩展,并提供了所有组件共有的数据。此外,反电动势的感应还部署在多个组件中,每个组件专门针对特定的微控制器家族。
| 组成部分 | 描述 |
|---|---|
| 霍尔速度与位置反馈 | 该元件利用三个霍尔效应传感器发出的信号,提供电机转子的速度和位置的测量 |
| BEMF速度与位置反馈——G4xx微型系列 | 该部件利用对电机相位的反电动势感测,估计电机转子的位置,并计算转速 |
| BEMF速度与位置反馈——F0xx微型系列 | 该部件利用对电机相位的反电动势感测,估计电机转子的位置,并计算转速 |
| BEMF速度与位置反馈——G0xx微型系列 | 该部件利用对电机相位的反电动势感测,估计电机转子的位置,并计算转速 |
| BEMF速度与位置反馈——C0xx微型系列 | 该部件利用对电机相位的反电动势感测,估计电机转子的位置,并计算转速 |
| BEMF速度与位置反馈——F4xx微型系列 | 该部件利用对电机相位的反电动势感测,估计电机转子的位置,并计算转速 |
| BEMF速度与位置反馈——F3xx微型系列 | 该部件利用对电机相位的反电动势感测,估计电机转子的位置,并计算转速 |
表5:可用的速度和位置反馈组件
固件中还包含一个额外的实现:虚拟速度与位置反馈组件。该组件仅在发动机的加速阶段使用,而基于Back_EMF的实现则用于闭环模式。
反电动势感测与零交叉点检测
反电动势传感器组件完全掌控其ADC外设。应用程序可以使用电机控制子系统空闲的ADC通道,但可能不会直接与这些通道接口。应用程序应使用常规转换管理器(RCM)组件的功能。完整描述请参阅MC SDK的参考文档。
图17展示了TIM1 PWM输出与ADC之间的同步策略。通常,A/D转换器外设配置为在衰减时间(PWM的关断时间)中,由TIM1_CH4的下降沿触发。
图17:PWM与ADC同步
无刷电机的反电动势波形会随着转子位置和转速的变化而变化,呈梯形。图18显示了一个电气化周期内的电流波形和反电动势,实线表示电流(为简化起见,忽略波纹)。虚线表示反电动力,水平坐标表示电机转动的电气视角。
图18:BLDC电流与反电动势波形
每个两个相位切换点的中间对应一个点,其反向电动势极性发生变化,即零交叉点。
为了减少中断次数和MCU负载,反向电磁场(Back-EMF)传感器组件利用ADC的模拟看门狗功能,对转换后的BEMF信号与零交叉阈值进行比较。一旦满足零交叉事件条件,模拟看门狗中断就会被触发。一旦确定了零交叉点,相位切换矩会在电延迟30°后设定。
识别零点有两种不同的策略:
关闭时间的反电动势感应
这种检测方式可用于电流和电压两种驾驶模式。原理如图17所示,即在PWM的OFF时间触发ADC转换。在每个6-Step换相开始时,选择对应浮相的ADC信道。在与浮动相去磁期相对应的掩蔽期后,反电动势读数不可靠,转换后的数值与阈值进行比较,以确定反电动势极性变化。一旦检测到零交叉点,会根据当前测得速度设定30°电度延迟,定时器更新后触发最终的阶跃换易。比较阈值可以独立设定,取决于反电动势的变化方向(增加或减少)。
注意:为避免损坏器件,如图19所示,背电动势读数的最小值受限于板上存在的保护二极管
图19:反电动势感应与阶跃换相
导通时间内的反电动势感测
这种检测方式仅适用于电压驱动模式,在占空比固定且步进过程中不变。原理如图20所示,即在PWM导通时间触发ADC转换。在每个6-Step换相开始时,会选择对应浮相的ADC通道。在与浮动相去磁期相对应的掩蔽期后,由于电阻网络可以估算中心抽头点(三相电机的共同点)电压,反电动势读数不可靠,转换后的值会与理想情况下为母线电压一半的阈值进行比较。阈值的设定基于一个电阻分流网络,该电阻将相电压重新标放到ADC输入范围。一旦基于当前测得速度的交叉点被编程为定时器,其更新最终触发步进换易。
图20:导通时间内的反电动势
虽然在关断时间内的反电动势感应通常在无传感器模式下进行,但用户可以在导通时间内启用或关闭感应,只要选择电压驱动模式。
当两种传感技术同时使用时,算法会根据PWM占空比自动切换,从而接近100%占空比。
在接下来的部分中,将解释所有可在工作台和/或Motor Pilot图形界面中找到的无传感器配置参数。
它定义了用于计算平均速度的样本数量
该阈值用于检测PWM断电感测和对低侧MOSFET施加PWM时的BEMF零点交叉(快速消磁)。在此状态下,PWM关断时间内,负载电流在两个高侧MOSFET中循环,浮相被拉升至母线电压。理想情况下,当BEMF为零时,浮相是绕组中心点的复制品,其电压等于母线电压(见图19)。
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
图21:PWM关闭——高侧再循环
该阈值用于检测PWM断开检测和高侧MOSFET施加PWM时的BEMF零交叉(标准驱动)。在此状态下,PWM断电时间内,负载电流在两个低侧MOSFET中循环,浮相被拉回地面。理想情况下,当BEMF为零时,浮相是绕组中心点的复制品,其电压为零(见图20)。
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
图22:PWM关闭 - 低侧再循环
它定义了在PWM关机时间内感应BEMF时ADC的采样点(图4的CCR17point)。它被定义为PWM周期时长的百分比。
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
该阈值用于检测PWM导通检测中的BEMF零点穿越。在此状态下,负载电流流经一个高侧MOSFET、电机的两个带电相和一个低侧MOSFET。理想情况下,当BEMF为零时,浮动相是绕组中心点的复制品,其电压位于母线电压和地之间的中间位置。
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
它定义了在PWM导通时间内感知BEMF时ADC的采样点(图4的CCR20点)。它被定义为PWM周期时长的百分比。
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
它定义了PWM占空比阈值,算法会自动从BEMF失控传感切换到BEMF导通。
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
它定义了算法用于计算当PWM占空比下降时返回BEMF离波传感器阈值的PWM占空比滞后。
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
该参数(ZCD下落)用于计算零穿越事件与下落BEMF的步长与随后步变之间的延迟。名义上为30电度(步进中点的零交叉点),但为了在高速或每步PWM周期数较少时保持转子同步,需要降低,因为由于样品离散化,零点交叉事件的检测时间比实际位置晚。
图23:零交叉与阶跃变化之间的延迟计算
例如,参考图23:
delay_F1 = ZCD_falling / 60 × period_R1
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
该参数(ZCD_rising)用于计算零交叉事件与随后步进变化之间的延迟。名义上为30电度(步进中点的零交叉点),但为了在高速或每步PWM周期数较少时保持转子同步,需要降低,因为由于样品离散化,零点交叉事件的检测时间比实际位置晚。
例如,参考图21:
delay_R1 = ZCD_rising / 60 × period_F0
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
该参数允许基于前一步或前一步的 BEMF 零交叉检测事件后实现 6 步计算延迟(步时间 – 1 或 -2)。在两步时间的情况下,计算延迟对同类下降的BEMF信号进行。
例如,参考图21:
步长-1 → delay_F2 = ZCD_falling / 60 × period_R2
步进时间-2 → delay_F2 = ZCD_falling / 60 × period_F1
该参数可在工作台的“速度感知配置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
触发零交叉事件的零交叉信号数量。它改变了模拟看门狗滤波器的配置,且仅适用于G4微控制器。该参数可在Motor Pilot图形界面的高级配置部分实时更改。
消磁时间的持续时间,以电机加速过程中计算的步长百分比表示。在此期间不被探测到BEMF,且忽略零交叉信号。该参数可以在工作台的“驱动器设置”部分设置。
去磁时间持续时间,以切换相(同步转子)后计算的步进持续时间百分比表示。在此期间不被探测到BEMF,且忽略零交叉信号。该参数可以在工作台的“驱动器设置”部分设置。
每一步变换后的去磁持续时间设置为最小值(定义为“最小去磁时间”),当电机转速高于去磁速度阈值时。该参数可在工作台的“驱动器设置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
当电机转速高于“消磁速度阈值”时,应用最短消磁时间。它定义为在阶变后未检测到BEMF且忽略零交叉信号的PWM周期。该参数可在工作台的“驱动器设置”部分设置,并在Motor Pilot图形界面的高级配置部分实时更改。
STM32 MC 固件提供了用于报告总线电压值的组件。当然,对于低压或过压保护等特性,总线电压的测量是必要的。
总线电压感测元件有两种实现方式。一种使用ADC通道和两个大电阻测量电压(电阻分压母线电压传感器),另一种实际上不测量任何东西,只报告配置值(虚拟总线电压传感器)。
在测量过程中,电阻分压器母线电压传感器的实现使用ADC中一个通道,这得益于常规转换API的标准转换API,配置为电机1的电流反馈。详情请参阅第5.2.4节。
STM32 MC 固件提供了一个用于报告电机控制子系统温度的组件。该组件——NTC温度传感器——既作为真实温度传感器,利用ADC通道测量探头温度,也作为虚拟温度传感器报告已配置的温度值。
本节介绍固件附带的一些驱动调节组件。有关所有这些部件的完整信息,请参阅STM32电机控制参考手册。
PID
PID组件提供了比例–积分–导数控制器的实现。该分量主要用于速度控制器中的参考计算环路。
它有两种形式:一种是包含所有三个项的完整PID,另一种是更简单的,只使用比例项和积分项。运动控制子系统使用后者。
速度控制
该组件有两个目的:
转速部件负责启动发动机。其任务从电机开环启动开始,到速度控制环可以闭合时结束。
可启用即时启动组件,启动已旋转的电机,无需制动或失去同步,跳过加速开环过程。它包括两个步骤:
以下参数可在图形界面中配置,以优化即时启动。
电流监听元件利用外部硬件(通常是并联电阻和运算放大器)来获得负载电流的平均读数。在PWM导通状态期间,电流在步进过程中被采样。用户可以配置采样时间和相对于PWM边缘的时间保护。
当前监测组件只有在当前读数和当前监测选项同时被标记时才会启用并添加到Generate的项目中。
以下参数可定制:
初始位置检测(IPD)是一种功能,可以估算静止时的初始旋翼位置。它是基于转子位置不同磁电路的饱和度不同。电机可以无需开环相位即可启动。该函数在START状态下执行。原理是产生六个不同方向的电流脉冲,每个方向后跟其相反方向,以避免任何运动(例如0 - 180 ; 60 - 240 ; 120 - 300)。电流被采样并插值,以获得30的分辨率。三个连续电流矢量的总和,取最大值即为初始角度。
IPD可以与扫描阶段结合,使相对负载较大的电机静止启动。IPD后,会相应应用步骤,然后开始扫描阶段以检查是否有BEMF。扫描结束时,固件会检查切换到RUN模式的条件是否满足。如果没有,则执行新的序列IPD扫描,直到电机旋转。
只有当MCSDKWB的当前读数和当前监测选项都被标记时,IPD才会被添加到Generate的项目中。IPD 启用可以通过 Motor Pilot 的图形界面实现。
以下参数可定制:
电机控制驾驶舱在电机控制子系统中起着核心作用;它配置并集成了为MC应用选定的部分组件。此外,它还实现了6-Step算法、参考计算和安全环路,以匹配设计应用。
因此,它必须支持各种配置,导致源代码可能庞大且繁琐。为了避免此问题并尽可能简化代码,驾驶舱的大部分代码都是从应用程序的特性Generate的。得益于这一代,只有MC系统所需的代码部分出现在MC驾驶舱的源代码中。
尽管其性质不断变化,MC驾驶舱的守则依然以统一且有结构的方式组织。
本节列出了制作MC驾驶舱最重要的源文件。请参阅 STM32 MC SDK 参考文档(随 SDK 附带)获取这些文件及其文档的完整列表。
motorcontrol.c,motorcontrol.h:
motorcontrol.c 文件主要包含一个函数 MX_MotorControl_Init(),由 STM32CubeMx Generate的应用程序用于初始化 MC 子系统。它的 motorcontrol.h 伴随文件仅对 STM32STM32CubeMX Generate的 main.c 文件有用,用于获取调用函数的原型。
mc_api.c,mc_api.h:
这对文件包含了应用程序可用来控制电机的高级应用程序接口的定义和实现。该API的描述请参见第6.1节。因此,mc_api.h 是应用程序需要包含的文件才能使用。
mc_config.c,mc_config.h:
mc_config.c 文件包含用于配置 MC 子系统所有组件的结构和数据。mc_config.h 文件导出应用所使用的结构名称,作为底层 API,详见第 6.2 节。
mc_parameters.c,mc_parameters.h:
mc_parameters.c 文件包含包含 MC 子系统常量参数的结构和数据。其功能类似于 mc_config.c 文件,但其内容可以完全存储在 FLASH 内存中,因为它是常态的。mc_parameters.h 文件导出了应用程序在下层 API 的视野内读取结构名称,如第 6.2 节所述。
mc_types.h:
该文件包含在电机控制子系统中使用的类型定义。此外,它还包含了所有与电机控制子系统相关的 STM32 立方体 LL 头文件。
电机控制子系统参数:
Generate一系列文件,包含大量常量——定义为 C 预处理器符号——这些常量被设置为对 MC 子系统有意义的值,并用于其代码中。其中一些文件专门针对某个STM32家族,只有当所选MCU属于该家族时才会存在。这些文件的列表:
中断处理:
电机控制子系统为其使用的中断提供处理程序。这些定义在依赖于所选STM32系列的文件中(G32xx微控制器家族为stm32_mc_common_it和stm4g4xx_mc_it.c)。
mc_tasks.c,mc_tasks_sixstep.c:
该文件包含了MC驾驶舱核心的实现。它包含了第5节开头描述的循环代码。关于这些学校的更多信息如下。
这些文件包含了MC驾驶舱核心的实现。它包含了第5节开头描述的循环代码。关于这些学校的更多信息如下。
MC固件子系统核心的三个环路的代码被分配到“任务”功能中。6-Step循环在SixStep_StepCommution()函数中实现。该功能在每换一步时执行(即每电气周期一次),并负责更新PWM定时器配置。
参考计算循环在函数 TSK_MediumFrequencyTaskM1()中实现。该函数需要定期调用,频率通常低于TSK_HighFrequencyTask()的频率。在 STM32 MC 固件子系统中,SysTick 中断时调用这些函数。
安全环路由 TSK_SafetyTask() 函数实现。该函数基本上调用了TSK_SafetyTask_PWMOFF()或TSK_SafetyTask_LSON(),具体取决于所选的过压保护。TSK_SafetyTask() 是周期性调用的,频率与参考计算环相同,且在同一中断中。
MC子系统会向应用程序报告它检测到的故障。在故障检测时,MC固件首先执行动作,将电机硬件子系统置于安全状态,然后进入故障状态。这些作总是导致故障电机被停止。
检测到的故障包括:
| 组成部分 | 描述 |
|---|---|
| MC_NO_ERROR | 目前电机控制子系统尚无故障待决 |
| MC_OVER_VOLTAGE | 总线检测到过电压状态 |
| MC_UNDER_VOLTAGE | 总线检测到电压不足 |
| MC_OVER_TEMP | 系统温度超过了最大阈值 |
| MC_START_UP | 启动阶段在速度和位置估计可靠之前结束 |
| MC_SPEED_FDBK | 转速反馈不再可靠(通常是转子转速过低时发生) |
| MC_OVER_CURR | 检测到过流状态 |
| MC_DP_FAULT | 检测到来自电源设备嵌入保护的一般故障信号 |
| MC_SW_ERROR | 检测到非电机相关的错误(纯MC固件错误) |
表6:检测到的故障
MC固件中故障的处理涉及MC状态机的两种状态。当检测到故障时,MC状态机进入FAULT_NOW状态,表明当前存在故障状态。进入该状态后,PWM输出立即被切断。只要故障条件有效,即导致故障声明的条件为真,MC状态机就会保持该状态。当无故障状态不再激活时,MC状态机切换到FAULT_OVER状态,并保持该状态直到应用程序确认。在故障确认后,MC状态机恢复到空闲状态,子系统准备再次启动电机(见第5.3.3节)。
在某些情况下,应用需要使用MC子系统使用的ADC外设的自由通道进行相位反电动势测量。如《配置外设与STM32CubeMx》一文中所述,这些ADC通道可以配置为STM32CubeMx。
但应用程序不得直接使用这些通道。它可能更可能使用《编程在电机控制ADC上编程常规转换、检索电机控制ADC常规转换结果以及获取电机控制ADC常规转换状态》中描述的API函数。事实上,相位反电动势测量的时刻必须设定在PWM周期内。固件中采用注入转换,PWM定时器发出的外部触发器启动了它们。
因此,应用程序不能对这些ADC外设使用注入转换,因为它们仅用于电机控制,必须避免干扰注入转换。这里提到的API的目的是允许应用程序在不干扰电机控制子系统的情况下进行常规的ADC转换。与他们完成转换是一个三步流程:
1. 调用MC_ProgramRegularConversion()函数,请求对给定信道和给定转换时间进行ADC常规转换。随后,电机控制子系统会在下一次注入转换后、无碰撞风险的情况下安排请求的转换;
2. 应用程序随后可以调用 MC_GetRegularConversionState() 函数,以确定请求的转换是否完成。
3. 最后,应用程序调用MC_GetRegularConversionValue()以获取转换后的值。
注意:电机控制子系统一次只能接受一种转换。因此,应用程序可以使用MC_GetRegularConversionState()来判断转换是否可处理。此外,所有转换请求必须在具有相同优先级的例程内执行。
MC固件子系统维护其所控制电机的状态机。电机执行的任务以及可调用的API函数依赖于状态机的当前状态。
图24详细介绍了完整的MC状态机。状态用蓝色圆圈表示,而状态间可能的过渡则用箭头标记。
实际的状态机可能更简单,取决于配置的应用程序。事实上,有些州只在特定情况下才需要。例如,关于电机加速和闭环切换的状态只有在使用无传感器模式时才有用。
应用程序从未直接更改状态机。其管理由 TSK_MediumFrequencyTaskM1() 函数中的 Reference 计算循环负责。
图24:电机状态机
| 组成部分 | 描述 |
|---|---|
| 怠速 | 电机没有旋转,但准备启动或对齐 |
| CHARGE_BOOT_CAP | 栅极驱动器引导电容将充电的州 |
| 开始 | 说明电机校准和加油步骤的执行地点。最后,验证了无传感器的旋翼位置估计 |
| SWITCH_OVER | 速度环闭合的州。以下状态通常是运行状态 |
| 快跑 | 带运行中的马达的状态。当执行停止电机命令时,以下状态通常为停止。 |
| 停下 | 当检测到状态机移动条件(停止程序完成)时,以下状态通常为空闲状态 |
| FAULT_NOW | 状态机可以通过STM_FaultProcessing()函数直接从任意状态移动到该状态。该方法还能管理唯一允许的跟随状态——FAULT_OVER。 |
| FAULT_OVER | 当故障条件消失时,应用应保留的州。以下状态通常是闲置状态。一旦用户确认故障状态,状态机就会被移动 |
表7:电机状态机
为了简化MCSDK6-Step算法对BDLC电机的调试和调校,MCSDK固件引入了带有部分调试功能的开环模式。
开放环
启用时,开环模式取代了算法在闭环运行时由速度PI模块执行的速度控制。开环模式可选择电压驱动或电流驱动模式。在电压驱动模式下,控制三相的PWM定时器的占空比不再由速度PI模块驱动,而是直接由用户界面(即Motor Pilot)发出的指令驱动。带电模式,来自同一接口的类似指令控制另一个PWM定时器的占空比,用于限制相位电流,从而限制电机转速。开环模式还设计用于获取来自电位器的信息并将其转换为占空比信息。在这种情况下,函数 OLS_Potentiometer_Run() 是调用 SPDPOT_Run(),由 SysTick 中断触发的连续调用 MC_APP_PostMediumFrequencyHook_M3() 和 MC_RunMotorControlTasks() 函数。
DutyCycleRefTableSize
开环模式可以在执行MC_StartMotor1()之前启用,或在电机运行时启用(电机状态机的运行状态)。一旦启用该功能,速度PI过程就不再执行,来自用户界面的占空比指令会被存储到最大深度为12采样的缓冲区中。对这12个占空比存储值进行平均计算,使用户在更改指令时能够快速平稳地过渡。
与速度PI控制类似,开环占空比计算的周期性基于SysTick中断。在电机状态机的SWITCH_OVER和运行状态下执行函数TSK_MediumFrequencyTaskM1()时,调用OLS_CalcOpenLoopDutyCycleCM()电流模式OLS_CalcOpenLoopDutyCycleVM或电压模式下的调用。
RevUp
与闭环模式类似,启动过程可在切换到开环模式前执行 RevUP 阶段。对齐和加速阶段的执行方式相同。但为了调试目的,这个RevUp阶段可以被绕过,使电机能够从噪声中启动,前提是其特性允许。启动阶段的执行控制是在电机状态机的START和SWITCH_OVER状态下执行函数TSK_MediumFrequencyTaskM1()时执行的。
感知
BEMF零交叉检测通常在PWM感应关闭时进行,电机在一定转速内,过程切换到PWM导通检测,例如电压驱动模式。开环功能能够在PWM导通感测模式下,无论速度如何,都能实现BEMF零交叉检测。在这种情况下,预计不再有PWM感测模式的转换。请注意,这会影响发动机在最低转速下运行。PWM ON感应模式启用功能在当前驾驶模式下无法工作。当该PWM ON感测模式被激活(OLS_GetOnSensing() = true)时,调用函数OLS_SetSamplingPoint()代替函数BADC_SetSamplingPoint(),设定所有特定参数,尤其是用于零交叉检测的PWM阈值,用于PWM定时器的PWM导通感测配置。调用函数 OLS_SetSamplingPoint() 是在电机状态机的 CHARGE_BOOT_CAP 和 RUN 状态下执行 TSK_MediumFrequencyTaskM1() 时完成的。
电压因子电流因子
BDLC电机被定义为在工作周期达到100%时,以梯形相电流全速工作。然而,用户设定的占空比因子允许通过计算占空比本身的百分比来限制占空比。这在例如电流模式下,由于电流限制,最高转速在占空比较低时非常有用(从该值开始,无论占空比增加,速度保持恒定)。
电机控制API,也称为MC API,是为控制由STM32 MC子系统驱动的电机提供的主要且最直接的接口。
为了简化起见,MC API 提供了一组功能,将这些函数期望的参数数量限制在最低限度。
该API的主要目的是启动、停止电机并控制其旋转。电机转动控制通过编程一个速度参考实现,电机控制子系统的PID调节器将维持该速度。必须在启动电机前设置这样的参考。
速度参考被编程为一个斜坡,在给定时间内将实际参考值从当前值移动到目标值。
如果电机旋转且稳定(其状态机处于运行状态),则会立即执行程序化的参考或斜坡。否则,它会被缓冲,直到电机的状态机达到运行状态。一次只能编程一个参考或斜坡,最后一个替换前一个。
除了旋转控制功能外,MC API 还提供获取 MC 子系统各种参数和状态变量的函数,例如机械或电气速度。
这里简要介绍了MC API的主要功能及其使用原则。完整的定义可在STM32 MC SDK参考手册中找到。
启动目标发动机。*在调用该函数之前,必须设置速度斜坡或占空比参考。
目标电机停止。如果目标电机不旋转,这个功能就没有作用。否则,PWM输出会被关闭,无论MC子系统处于闭环还是仍在加速阶段。
在目标电机上编程速度坡道。如果目标电机处于运行状态——即电机旋转且稳定——则立即执行斜坡。否则,会被缓冲,直到达到该状态。
速度斜坡将电机从起始时的转速提升到hDurations期间的hFinalSpeed目标速度。
停止目标电机当前的速度坡度。
如果目标电机的最后提交的坡道已完成,则返回为真;否则返回为假。
返回应用于输出相位的占空比参考。
返回目标电机最后提交命令的状态。“命令”指的是速度坡度或工作比参考设置。
返回的状态是一个MCI_CommandState_t枚举值:
MCI_BUFFER_EMPTY:不提交命令;MCI_COMMAND_NOT_ALREADY_EXECUTED:命令已被缓冲但执行尚未完成;MCI_COMMAND_EXECUTED_SUCCESSFULLY:最后一个缓冲命令的执行成功完成;MCI_COMMAND_EXECUTED_UNSUCCESSFULLY: 最后一个缓冲命令的执行未成功。返回目标电机的控制模式。可用的返回状态有(开环作)和(闭环作)。MCM_TORQUE_MODEMCM_SPEED_MODE
返回目标电机的驱动模式。它可以是VM(电压模式)或CM(电流模式)。
返回最后一个指令对目标电机施加的方向。返回的值是1或-1。
如果目标电机的速度传感器能提供可靠的数值,则返回为真。
返回目标电机的最后计算平均机械转子转速,单位为dHz(十分之一赫兹)。
回归电机转子的电角。
确认目标电机上的MC故障。如果错误确实存在,该函数返回真,否则返回假。有关多重故障管理的更多信息,请参阅第5.3.1节。
返回一个位字段,显示自目标电机的MC状态机移至FAULT_NOW状态以来发生的故障。有关MC故障管理的更多信息,请参阅第5.3.1节,关于MC状态机的描述请参见第5.3.3节。
返回一个显示目标电机所有电流故障的位字段。有关多重故障管理的更多信息,请参阅第5.3.1节。
返回目标电机状态机的当前状态。请参阅第5.3.3节,了解MC状态机及State_t枚举值的描述。
MC固件提供的低级应用程序接口使需要对MC子系统内部结构更细致控制的应用成为可能。该 API 包含所有实例化的组件,以构成子系统。这些组件可以通过它们的地址被应用程序调用。这些句柄定义在 mc_config.c 文件中,可通过包含 mc_config.h 文件访问。更多信息请参阅随SDK附带的STM32 MC SDK参考手册。
上一页:固件使用的测量单位 ↤|目录 |↦ 下一页:电角度估计补偿